CodeIgniter এর Authentication এবং Authorization

Web Development - কোডইগনাইটার (Codeigniter) -

Authentication এবং Authorization দুটি গুরুত্বপূর্ণ নিরাপত্তা প্রক্রিয়া যা ওয়েব অ্যাপ্লিকেশনে ব্যবহারকারীদের নিরাপদ প্রবেশাধিকার এবং তাদের ভূমিকা বা অনুমতির ভিত্তিতে সেবা প্রদান করতে সাহায্য করে। CodeIgniter-এ এই দুটি প্রক্রিয়া সহজে বাস্তবায়ন করা যায়। চলুন, আমরা Authentication (ব্যবহারকারী শনাক্তকরণ) এবং Authorization (অনুমোদন) প্রক্রিয়া কীভাবে CodeIgniter-এ প্রয়োগ করা হয় তা দেখি।


Authentication কী?

Authentication হলো একটি প্রক্রিয়া যার মাধ্যমে অ্যাপ্লিকেশন ব্যবহারকারীর পরিচয় যাচাই করে। এটি সাধারণত ইউজারনেম এবং পাসওয়ার্ড এর মাধ্যমে সম্পন্ন হয়। Authentication সফল হলে, ব্যবহারকারীকে অ্যাপ্লিকেশনে প্রবেশের অনুমতি দেওয়া হয়।


Authorization কী?

Authorization হলো একটি প্রক্রিয়া, যার মাধ্যমে নির্ধারিত হয় যে ব্যবহারকারী কোন কার্যক্রম করতে পারবে বা কোন সেকশনে অ্যাক্সেস পাবে। সাধারণত, একবার Authentication সফল হলে, Authorization সিদ্ধান্ত নেয় যে ব্যবহারকারী কোন নির্দিষ্ট রিসোর্স বা ফিচারে অ্যাক্সেস করতে পারে।


CodeIgniter-এ Authentication এবং Authorization

CodeIgniter-এ Authentication এবং Authorization বাস্তবায়ন করতে Session ব্যবহার করা হয়, যা লগইন স্টেট এবং ব্যবহারকারীর ভূমিকা সংরক্ষণে সাহায্য করে।


Authentication বাস্তবায়ন

১. ব্যবহারকারী লগইন সিস্টেম তৈরি

Controller: Auth.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Auth extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('User_model');
        $this->load->library('session');
    }

    public function login() {
        // ফর্ম সাবমিট হলে
        if ($this->input->post()) {
            $username = $this->input->post('username');
            $password = md5($this->input->post('password'));  // পাসওয়ার্ড এমডি5 এ এনক্রিপ্ট

            // ইউজার ডেটা যাচাই
            $user = $this->User_model->get_user($username, $password);
            if ($user) {
                // সেশন ডেটা সেট করা
                $this->session->set_userdata('user_id', $user['id']);
                $this->session->set_userdata('username', $user['username']);
                redirect('dashboard');  // ড্যাশবোর্ড পেজে রিডাইরেক্ট
            } else {
                $this->session->set_flashdata('error', 'Invalid username or password');
                redirect('auth/login');  // ভুল লগইন হলে লগইন পেজে রিডাইরেক্ট
            }
        }
        $this->load->view('login');
    }

    public function logout() {
        $this->session->sess_destroy();  // সেশন ধ্বংস করা
        redirect('auth/login');  // লগআউট হলে লগইন পেজে রিডাইরেক্ট
    }
}
Model: User_model.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class User_model extends CI_Model {

    public function get_user($username, $password) {
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $query = $this->db->get('users');  // 'users' টেবিল থেকে ইউজারের ডেটা খুঁজে বের করা
        return $query->row_array();  // ইউজার তথ্য ফেরত
    }
}
View: login.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h2>Login</h2>
    <?php if ($this->session->flashdata('error')): ?>
        <p style="color: red;"><?php echo $this->session->flashdata('error'); ?></p>
    <?php endif; ?>
    <form method="post" action="<?php echo site_url('auth/login'); ?>">
        <label>Username:</label>
        <input type="text" name="username" required><br><br>
        <label>Password:</label>
        <input type="password" name="password" required><br><br>
        <input type="submit" value="Login">
    </form>
</body>
</html>

Authorization বাস্তবায়ন

২. ব্যবহারকারীর ভূমিকা যাচাই

একবার Authentication সফল হলে, আপনি Authorization যোগ করতে পারেন, যা ব্যবহারকারীর ভূমিকা বা অনুমতি নির্ধারণ করবে।

Controller: Dashboard.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Dashboard extends CI_Controller {

    public function __construct() {
        parent::__construct();
        if (!$this->session->userdata('user_id')) {
            redirect('auth/login');  // যদি ইউজার লগইন না থাকে তবে লগইন পেজে রিডাইরেক্ট
        }
    }

    public function index() {
        $this->load->view('dashboard');
    }

    public function admin() {
        // ইউজারের ভূমিকা চেক করা
        if ($this->session->userdata('role') !== 'admin') {
            echo "Unauthorized access";
            return;
        }
        $this->load->view('admin_dashboard');
    }
}
View: dashboard.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
</head>
<body>
    <h2>Welcome to Dashboard</h2>
    <p>Welcome, <?php echo $this->session->userdata('username'); ?></p>
    <a href="<?php echo site_url('auth/logout'); ?>">Logout</a>
</body>
</html>
Database Structure (users টেবিল)

users টেবিলে ইউজারদের তথ্য এবং তাদের ভূমিকা (role) রাখতে হবে।

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `password` varchar(255) NOT NULL,
  `role` varchar(50) NOT NULL DEFAULT 'user',  -- 'user' বা 'admin' হবে
  PRIMARY KEY (`id`)
);

Authentication এবং Authorization এর সুবিধা

  1. নিরাপত্তা: Authentication এবং Authorization ব্যবহারের মাধ্যমে আপনার অ্যাপ্লিকেশনকে নিরাপদ করা যায়।
  2. ভূমিকা ভিত্তিক অ্যাক্সেস: বিভিন্ন ভূমিকার জন্য পৃথক অ্যাক্সেস নিয়ন্ত্রণ তৈরি করা যায়, যেমন admin, user ইত্যাদি।
  3. সাধারণ ব্যবহার: CodeIgniter এর Session লাইব্রেরি এবং Custom ফাংশন ব্যবহার করে সহজেই Authentication এবং Authorization বাস্তবায়ন করা যায়।

উপসংহার

CodeIgniter-এ Authentication এবং Authorization বাস্তবায়ন করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের নিরাপত্তা উন্নত করতে পারবেন। Authentication নিশ্চিত করে যে ব্যবহারকারী সঠিকভাবে লগইন করেছে, এবং Authorization নিশ্চিত করে যে তারা তাদের অনুমতি অনুযায়ী সেবা গ্রহণ করতে পারবে।

Content added By

User Authentication তৈরি করা

User Authentication একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য যেকোনো ওয়েব অ্যাপ্লিকেশনের জন্য, যা ব্যবহারকারীদের সিস্টেমে লগইন, সাইনআপ এবং সেশন পরিচালনা করতে সহায়ক। CodeIgniter-এ সহজেই User Authentication সিস্টেম তৈরি করা সম্ভব, এবং এটি ব্যবহারকারীর লগইন, সাইনআপ, লগআউট, সেশন পরিচালনা ইত্যাদি প্রক্রিয়াগুলো সহজ করে তোলে।

এই টিউটোরিয়ালে, আমরা একটি User Authentication সিস্টেম তৈরি করব যা ব্যবহারকারীর সাইনআপ, লগইন, এবং লগআউট প্রক্রিয়া পরিচালনা করবে।


১. Database Setup

প্রথমে, একটি ডাটাবেস তৈরি করুন এবং সেখানে একটি users টেবিল তৈরি করুন।

Database Table (users)

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

২. Controller তৈরি

User Authentication এর জন্য একটি কন্ট্রোলার তৈরি করুন। এখানে আমরা Auth নামক একটি কন্ট্রোলার তৈরি করব।

Auth Controller (application/controllers/Auth.php)

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Auth extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('user_model');  // User model লোড করা
        $this->load->library('session');   // Session লাইব্রেরি লোড
        $this->load->helper(['form', 'url']);  // Form এবং URL হেল্পার লোড
    }

    // সাইনআপ ফর্ম দেখানো
    public function signup() {
        $this->load->view('signup');
    }

    // সাইনআপ প্রক্রিয়া
    public function register() {
        $username = $this->input->post('username');
        $email = $this->input->post('email');
        $password = password_hash($this->input->post('password'), PASSWORD_BCRYPT); // পাসওয়ার্ড হ্যাশ করা

        $data = [
            'username' => $username,
            'email' => $email,
            'password' => $password
        ];

        if ($this->user_model->insert_user($data)) {
            redirect('auth/login');
        } else {
            $this->session->set_flashdata('error', 'User registration failed!');
            redirect('auth/signup');
        }
    }

    // লগইন ফর্ম দেখানো
    public function login() {
        $this->load->view('login');
    }

    // লগইন প্রক্রিয়া
    public function authenticate() {
        $email = $this->input->post('email');
        $password = $this->input->post('password');

        $user = $this->user_model->get_user_by_email($email);

        if ($user && password_verify($password, $user['password'])) {
            $session_data = [
                'user_id' => $user['id'],
                'username' => $user['username'],
                'logged_in' => TRUE
            ];
            $this->session->set_userdata($session_data);
            redirect('welcome');
        } else {
            $this->session->set_flashdata('error', 'Invalid login credentials!');
            redirect('auth/login');
        }
    }

    // লগআউট প্রক্রিয়া
    public function logout() {
        $this->session->sess_destroy();
        redirect('auth/login');
    }
}

৩. User Model তৈরি

User Model তৈরি করে আমরা ডাটাবেসের সাথে যোগাযোগ করব। এখানে insert_user(), get_user_by_email() ফাংশনগুলো থাকবে।

User Model (application/models/User_model.php)

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class User_model extends CI_Model {

    // নতুন ব্যবহারকারী সাইনআপ
    public function insert_user($data) {
        return $this->db->insert('users', $data);
    }

    // ইমেইল দিয়ে ব্যবহারকারী অনুসন্ধান
    public function get_user_by_email($email) {
        $this->db->where('email', $email);
        $query = $this->db->get('users');
        return $query->row_array(); // একক রেকর্ড ফেরত আনে
    }
}

৪. Views তৈরি

৪.১ Signup View (application/views/signup.php)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Sign Up</title>
</head>
<body>

    <h2>Create an Account</h2>
    
    <?php echo form_open('auth/register'); ?>
    
    <label for="username">Username</label>
    <input type="text" name="username" required><br>
    
    <label for="email">Email</label>
    <input type="email" name="email" required><br>
    
    <label for="password">Password</label>
    <input type="password" name="password" required><br>
    
    <button type="submit">Sign Up</button>
    
    <?php echo form_close(); ?>
    
</body>
</html>

৪.২ Login View (application/views/login.php)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>

    <h2>Login to Your Account</h2>

    <?php echo form_open('auth/authenticate'); ?>

    <label for="email">Email</label>
    <input type="email" name="email" required><br>

    <label for="password">Password</label>
    <input type="password" name="password" required><br>

    <button type="submit">Login</button>

    <?php echo form_close(); ?>

</body>
</html>

৫. Routes Configuration

CodeIgniter-এ রুট কনফিগারেশন সেট করতে, application/config/routes.php ফাইলে রুটগুলো উল্লেখ করতে হবে।

Routes Configuration (application/config/routes.php)

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

$route['auth/signup'] = 'auth/signup';
$route['auth/register'] = 'auth/register';
$route['auth/login'] = 'auth/login';
$route['auth/authenticate'] = 'auth/authenticate';
$route['auth/logout'] = 'auth/logout';

৬. Session Handling

Session ব্যবহারকারী লগইন সেশন পরিচালনার জন্য ব্যবহৃত হয়। CodeIgniter এ সেশন ব্যবহারের জন্য session লাইব্রেরি লোড করতে হয়। সেশন ব্যবহার করে লগইন তথ্য সংরক্ষণ এবং লগআউট করার সময় সেশন ধ্বংস করা হয়।

লগইন তথ্য যাচাই:

if ($this->session->userdata('logged_in')) {
    // ইউজার লগইন অবস্থায় থাকলে
    $username = $this->session->userdata('username');
} else {
    // ইউজার লগইন না থাকলে লগইন পেজে রিডিরেক্ট
    redirect('auth/login');
}

৭. লগইন সুরক্ষা এবং পাসওয়ার্ড হ্যাশিং

পাসওয়ার্ড সুরক্ষিত রাখার জন্য password_hash() এবং password_verify() ফাংশন ব্যবহার করা হয়। এটি পাসওয়ার্ড হ্যাশ করে ডাটাবেসে সংরক্ষণ করে এবং লগইন করার সময় সঠিকতা যাচাই করে।


উপসংহার

এটি ছিল CodeIgniter-এ একটি User Authentication সিস্টেম তৈরি করার একটি মৌলিক উদাহরণ। এই সিস্টেমে সাইনআপ, লগইন, লগআউট এবং সেশন ব্যবস্থাপনা করা হয়। এর মাধ্যমে একটি শক্তিশালী এবং নিরাপদ Authentication সিস্টেম তৈরি করা সম্ভব, যা আপনার অ্যাপ্লিকেশনকে সুরক্ষিত এবং ব্যবহারকারীদের জন্য কার্যকরী করে তোলে।

Content added By

User Roles এবং Permissions ম্যানেজ করা

User Roles এবং Permissions ব্যবস্থাপনা একটি ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোলের জন্য অত্যন্ত গুরুত্বপূর্ণ। CodeIgniter এ User Roles এবং Permissions ম্যানেজ করা সাধারণত ডাটাবেসে ইউজার, রোল এবং পারমিশন সম্পর্কিত টেবিল তৈরি করে পরিচালনা করা হয়।

এখানে, আমরা দেখবো কীভাবে Roles এবং Permissions সিস্টেম তৈরি করা যায়, যা ইউজারের অ্যাক্সেস নিয়ন্ত্রণে সহায়ক।


Step 1: ডাটাবেস টেবিল ডিজাইন

প্রথমে ডাটাবেসে তিনটি টেবিল তৈরি করা হবে:

  1. users: ইউজার তথ্য সংরক্ষণ করবে।
  2. roles: বিভিন্ন রোল সংরক্ষণ করবে (যেমন: admin, user, manager)।
  3. permissions: বিভিন্ন পারমিশন সংরক্ষণ করবে (যেমন: create, edit, delete, view)।

১.1 users টেবিল

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(100) NOT NULL,
  `password` VARCHAR(255) NOT NULL,
  `email` VARCHAR(100) NOT NULL,
  `role_id` INT NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`)
);

১.2 roles টেবিল

CREATE TABLE `roles` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `role_name` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`)
);

১.3 permissions টেবিল

CREATE TABLE `permissions` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `permission_name` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`)
);

১.4 role_permissions টেবিল

এটি roles এবং permissions টেবিলের মধ্যে সম্পর্ক তৈরি করবে।

CREATE TABLE `role_permissions` (
  `role_id` INT NOT NULL,
  `permission_id` INT NOT NULL,
  FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`),
  FOREIGN KEY (`permission_id`) REFERENCES `permissions`(`id`)
);

Step 2: CodeIgniter মডেল তৈরি

এখন আমরা CodeIgniter এর Model তৈরি করব, যা ডাটাবেসের টেবিল থেকে ডেটা সঠিকভাবে প্রসেস করবে।

২.1 Role_model.php মডেল

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Role_model extends CI_Model {

    public function get_roles() {
        $query = $this->db->get('roles');
        return $query->result();
    }

    public function get_permissions_by_role($role_id) {
        $this->db->select('permissions.permission_name');
        $this->db->from('role_permissions');
        $this->db->join('permissions', 'permissions.id = role_permissions.permission_id');
        $this->db->where('role_permissions.role_id', $role_id);
        $query = $this->db->get();
        return $query->result();
    }

    public function add_role($role_name) {
        $data = ['role_name' => $role_name];
        return $this->db->insert('roles', $data);
    }
}

২.2 Permission_model.php মডেল

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Permission_model extends CI_Model {

    public function get_permissions() {
        $query = $this->db->get('permissions');
        return $query->result();
    }

    public function add_permission($permission_name) {
        $data = ['permission_name' => $permission_name];
        return $this->db->insert('permissions', $data);
    }
}

Step 3: Controller তৈরি

এখন আমরা একটি Controller তৈরি করব যা ইউজার রোল এবং পারমিশন নিয়ন্ত্রণ করবে।

৩.1 RoleController.php Controller

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class RoleController extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('Role_model');
        $this->load->model('Permission_model');
    }

    // রোলের তালিকা দেখান
    public function index() {
        $data['roles'] = $this->Role_model->get_roles();
        $this->load->view('role_view', $data);
    }

    // রোল তৈরি করুন
    public function create_role() {
        $role_name = $this->input->post('role_name');
        $this->Role_model->add_role($role_name);
        redirect('rolecontroller');
    }

    // একটি রোলের পারমিশন দেখুন
    public function role_permissions($role_id) {
        $data['permissions'] = $this->Role_model->get_permissions_by_role($role_id);
        $this->load->view('permissions_view', $data);
    }
}

Step 4: Views তৈরি

৪.1 role_view.php (রোল দেখানো)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>User Roles</title>
</head>
<body>
    <h1>User Roles</h1>
    <form method="POST" action="<?php echo site_url('rolecontroller/create_role'); ?>">
        <input type="text" name="role_name" placeholder="Role Name">
        <input type="submit" value="Create Role">
    </form>

    <h2>Roles List</h2>
    <ul>
        <?php foreach ($roles as $role): ?>
            <li>
                <?php echo $role->role_name; ?>
                <a href="<?php echo site_url('rolecontroller/role_permissions/'.$role->id); ?>">View Permissions</a>
            </li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

৪.2 permissions_view.php (পারমিশন দেখানো)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Role Permissions</title>
</head>
<body>
    <h1>Permissions</h1>
    <ul>
        <?php foreach ($permissions as $permission): ?>
            <li><?php echo $permission->permission_name; ?></li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

Step 5: Permissions Assign করা

একটি রোলের জন্য পারমিশন অ্যাসাইন করতে, একটি নতুন টেবিল (role_permissions) তৈরি করা হয়েছিল, যা রোল এবং পারমিশন সম্পর্কিত রেকর্ড সংরক্ষণ করে। আপনি role_permissions টেবিল ব্যবহার করে পারমিশন অ্যাসাইন করতে পারেন।


Step 6: User Authentication এবং Authorization

এই সিস্টেমটি সম্পূর্ণ করার জন্য Authentication এবং Authorization সিস্টেমও তৈরি করতে হবে। এর মাধ্যমে একটি ইউজারের লগইন তথ্য যাচাই করে, তার রোল এবং পারমিশন অনুযায়ী অ্যাক্সেস কন্ট্রোল করা যাবে।


CodeIgniter-এ User Roles এবং Permissions ম্যানেজ করার জন্য ডাটাবেসে রোল এবং পারমিশন সম্পর্কিত টেবিল তৈরি করা হয় এবং মডেল, কন্ট্রোলার, ভিউয়ের মাধ্যমে সেগুলো পরিচালনা করা হয়। এটি নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোলের জন্য একটি শক্তিশালী উপায়, যেখানে ইউজারের রোল অনুযায়ী অ্যাক্সেস নিয়ন্ত্রণ করা সম্ভব হয়।

Content added By

Login এবং Registration System তৈরি করা

CodeIgniter দিয়ে একটি Login এবং Registration System তৈরি করা একটি সাধারণ এবং কার্যকরী প্রক্রিয়া। এই সিস্টেমটি ব্যবহারকারীকে সাইন আপ এবং লগ ইন করার সুযোগ দেয়। সাধারণভাবে, এটি ব্যবহারকারীর তথ্য ডাটাবেসে সংরক্ষণ করে এবং লগইন করার সময় সেগুলির যাচাই করে।

পদক্ষেপ ১: ডাটাবেস তৈরি এবং কনফিগারেশন

প্রথমে একটি MySQL ডাটাবেস তৈরি করুন এবং একটি users টেবিল তৈরি করুন যেখানে ব্যবহারকারীর তথ্য সংরক্ষিত হবে।

ডাটাবেস টেবিল

CREATE DATABASE user_management;
USE user_management;

CREATE TABLE users (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

পদক্ষেপ ২: CodeIgniter কনফিগারেশন

২.১: ডাটাবেস কনফিগারেশন

application/config/database.php ফাইলে ডাটাবেস কনফিগারেশন যোগ করুন:

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'user_management',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

২.২: URL কনফিগারেশন

application/config/config.php ফাইলে বেস URL সেট করুন:

$config['base_url'] = 'http://localhost/your_project_name/';

পদক্ষেপ ৩: Controller তৈরি

এখানে আমরা দুটি Controller তৈরি করবো: একটি RegistrationController এবং একটি LoginController

৩.১: RegistrationController তৈরি

application/controllers/RegistrationController.php ফাইলে নিচের কোডটি যোগ করুন:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class RegistrationController extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('UserModel'); // মডেল লোড
    }

    // রেজিস্ট্রেশন ফর্ম
    public function index() {
        $this->load->view('registration_form');
    }

    // রেজিস্ট্রেশন ডাটা ইনসার্ট করা
    public function register() {
        $username = $this->input->post('username');
        $email = $this->input->post('email');
        $password = password_hash($this->input->post('password'), PASSWORD_DEFAULT); // পাসওয়ার্ড হ্যাশ করা

        $data = array(
            'username' => $username,
            'email' => $email,
            'password' => $password
        );

        $this->UserModel->insert_user($data);
        redirect('logincontroller'); // লগিন পেজে রিডিরেক্ট
    }
}

৩.২: LoginController তৈরি

application/controllers/LoginController.php ফাইলে নিচের কোডটি যোগ করুন:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class LoginController extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('UserModel');
    }

    // লগিন ফর্ম
    public function index() {
        $this->load->view('login_form');
    }

    // লগিন যাচাই
    public function login() {
        $email = $this->input->post('email');
        $password = $this->input->post('password');
        $user = $this->UserModel->get_user_by_email($email);

        if ($user && password_verify($password, $user['password'])) {
            // সেশন তৈরি
            $this->session->set_userdata('user_id', $user['id']);
            redirect('dashboard');
        } else {
            $this->session->set_flashdata('error', 'Invalid email or password');
            redirect('logincontroller');
        }
    }
}

পদক্ষেপ ৪: Model তৈরি

৪.১: UserModel তৈরি

application/models/UserModel.php ফাইলে নিচের কোডটি যোগ করুন:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class UserModel extends CI_Model {

    // ব্যবহারকারী ইনসার্ট করা
    public function insert_user($data) {
        return $this->db->insert('users', $data);
    }

    // ইমেইল দিয়ে ব্যবহারকারী বের করা
    public function get_user_by_email($email) {
        $this->db->where('email', $email);
        $query = $this->db->get('users');
        return $query->row_array();
    }
}

পদক্ষেপ ৫: Views তৈরি

৫.১: Registration Form (registration_form.php)

application/views/registration_form.php ফাইলে নিচের কোডটি যোগ করুন:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Registration</title>
</head>
<body>

    <h2>Register</h2>

    <?php echo form_open('registrationcontroller/register'); ?>

    <label for="username">Username:</label>
    <input type="text" name="username" required><br><br>

    <label for="email">Email:</label>
    <input type="email" name="email" required><br><br>

    <label for="password">Password:</label>
    <input type="password" name="password" required><br><br>

    <input type="submit" value="Register">

    </form>

</body>
</html>

৫.২: Login Form (login_form.php)

application/views/login_form.php ফাইলে নিচের কোডটি যোগ করুন:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>

    <h2>Login</h2>

    <?php echo form_open('logincontroller/login'); ?>

    <label for="email">Email:</label>
    <input type="email" name="email" required><br><br>

    <label for="password">Password:</label>
    <input type="password" name="password" required><br><br>

    <input type="submit" value="Login">

    </form>

    <?php if ($this->session->flashdata('error')): ?>
        <p style="color: red;"><?php echo $this->session->flashdata('error'); ?></p>
    <?php endif; ?>

</body>
</html>

পদক্ষেপ ৬: Routes কনফিগারেশন

application/config/routes.php ফাইলে routes কনফিগার করুন:

$route['default_controller'] = 'logincontroller';
$route['logincontroller'] = 'logincontroller';
$route['registrationcontroller'] = 'registrationcontroller';
$route['dashboard'] = 'dashboardcontroller'; // একটি ড্যাশবোর্ড কন্ট্রোলার তৈরি করতে হবে

পদক্ষেপ ৭: সেশন কনফিগারেশন

application/config/config.php ফাইলে সেশন কনফিগারেশন যোগ করুন:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200; // 2 hours
$config['sess_save_path'] = NULL; // default to temp directory

উপসংহার

এই উদাহরণটি CodeIgniter-এ Login এবং Registration সিস্টেম তৈরি করার জন্য একটি সাধারণ গাইড। আপনি এটি কাস্টমাইজ করতে পারেন যেমন ইমেইল যাচাই বা password reset ফিচার যোগ করা। এই সিস্টেমটি সুরক্ষিত এবং কার্যকরী পদ্ধতিতে ব্যবহারকারী তথ্য পরিচালনা করতে সাহায্য করবে।

Content added By

OAuth 2.0 এবং Third-party Authentication

OAuth 2.0 এবং Third-party Authentication আজকাল অনেক ওয়েব অ্যাপ্লিকেশনে সাধারণ প্র্যাকটিস হয়ে উঠেছে, বিশেষত সুরক্ষিত অথেন্টিকেশন এবং অ্যাক্সেসের জন্য। CodeIgniter এ OAuth 2.0 এবং Third-party Authentication সেটআপ করা বেশ সহজ এবং এটি তৃতীয় পক্ষের সার্ভিস যেমন Google, Facebook, Twitter ইত্যাদি থেকে লগইন অথবা অ্যাক্সেস প্রদান করতে সাহায্য করে।


OAuth 2.0 কী?

OAuth 2.0 হল একটি প্রটোকল যা তৃতীয় পক্ষের অ্যাপ্লিকেশনকে ব্যবহারকারীর অ্যাকাউন্টে অ্যাক্সেস প্রদান করার অনুমতি দেয়, ব্যবহারকারীর পাসওয়ার্ড জানার প্রয়োজন ছাড়াই। এটি একাধিক অ্যাপ্লিকেশন বা সার্ভিসের মধ্যে নিরাপদ ডেটা শেয়ার করার জন্য ব্যবহৃত হয়।

OAuth 2.0-এ সাধারণত তিনটি পদ্ধতি ব্যবহৃত হয়:

  1. Authorization Code Grant: ওয়েব অ্যাপ্লিকেশনের জন্য।
  2. Implicit Grant: সাধারণত পাবলিক ক্লায়েন্ট অ্যাপ্লিকেশন (যেমন JavaScript অ্যাপ) জন্য।
  3. Client Credentials Grant: সার্ভার-সার্ভার অ্যাপ্লিকেশন ব্যবহারের জন্য।
  4. Resource Owner Password Credentials Grant: ইউজারের নাম এবং পাসওয়ার্ড সরাসরি ব্যবহার করা হয় (কম সিকিউর্ড)।

Third-party Authentication কী?

Third-party Authentication হলো এমন একটি পদ্ধতি যেখানে ব্যবহারকারীরা তৃতীয় পক্ষের প্রোভাইডারের মাধ্যমে লগইন করেন, যেমন Google, Facebook, Twitter, ইত্যাদি। এটি সাধারণত OAuth 2.0 প্রটোকল ব্যবহার করে, যেখানে তৃতীয় পক্ষের সিস্টেম ব্যবহারকারীর অ্যাকাউন্টের অ্যাক্সেস দেয়।


CodeIgniter-এ OAuth 2.0 এবং Third-party Authentication

১. OAuth 2.0 ইন্টিগ্রেশন

OAuth 2.0 ব্যবহার করতে CodeIgniter এ সাধারণত একটি লাইব্রেরি ব্যবহার করা হয়, যেমন CodeIgniter-OAuth2 অথবা HybridAuth লাইব্রেরি। এই লাইব্রেরিগুলি আপনাকে OAuth 2.0 প্রটোকল ব্যবহার করে তৃতীয় পক্ষের অ্যাপ্লিকেশন থেকে অথেন্টিকেশন পরিচালনা করতে সহায়তা করে।

১.1. HybridAuth লাইব্রেরি ব্যবহার

HybridAuth হলো একটি ওপেন সোর্স PHP লাইব্রেরি যা তৃতীয় পক্ষের সামাজিক সাইট থেকে অথেন্টিকেশন প্রদান করতে সহায়ক। এটি Google, Facebook, Twitter, LinkedIn, GitHub সহ অন্যান্য প্ল্যাটফর্মের সাথে ইন্টিগ্রেশন সমর্থন করে।

HybridAuth ইনস্টল করা
  1. HybridAuth লাইব্রেরি ডাউনলোড করুন: HybridAuth GitHub
  2. ডাউনলোড করা ফাইলটি আপনার application/libraries ডিরেক্টরিতে রাখুন।
  3. application/config/hybridauthlib.php কনফিগারেশন ফাইল তৈরি করুন এবং আপনার প্রয়োজনীয় API কীগুলি সংরক্ষণ করুন।
১.2. HybridAuth কনফিগারেশন
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config = array(
    'callback' => 'http://localhost/your_project/index.php/auth/callback',

    'providers' => array(
        'Google' => array(
            'enabled' => true,
            'keys'    => array('id' => 'YOUR_GOOGLE_CLIENT_ID', 'secret' => 'YOUR_GOOGLE_SECRET'),
            'scope'   => 'email',  // Requesting user's email address
        ),
        'Facebook' => array(
            'enabled' => true,
            'keys'    => array('id' => 'YOUR_FACEBOOK_APP_ID', 'secret' => 'YOUR_FACEBOOK_APP_SECRET'),
            'scope'   => 'email',
        ),
        // Add other providers like Twitter, LinkedIn, etc.
    )
);
১.3. Controller কোড
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Auth extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->library('hybridauthlib');
    }

    public function login() {
        // Google বা Facebook এর জন্য লগইন প্রক্রিয়া শুরু
        $this->hybridauthlib->authenticate('Google'); // বা 'Facebook'
    }

    public function callback() {
        // Callback URL যেখানে তৃতীয় পক্ষের সিস্টেম থেকে রেসপন্স আসবে
        $adapter = $this->hybridauthlib->adapter('Google'); // অথবা 'Facebook'

        // ব্যবহারকারীর তথ্য নিয়ে আসুন
        $user_profile = $adapter->getUserProfile();

        // প্রাপ্ত তথ্য দেখান বা ডেটাবেসে সংরক্ষণ করুন
        print_r($user_profile);
    }
}
১.4. View কোড (লগইন বাটন)
<a href="<?php echo site_url('auth/login'); ?>">Login with Google</a>
<!-- অথবা Facebook -->
<a href="<?php echo site_url('auth/login/facebook'); ?>">Login with Facebook</a>

২. OAuth 2.0 এর মাধ্যমে API ইন্টিগ্রেশন

CodeIgniter-এ যদি আপনি একটি OAuth 2.0 সার্ভিস তৈরি করতে চান, তাহলে OAuth2 লাইব্রেরি ব্যবহার করা যেতে পারে। এই লাইব্রেরি API এর মাধ্যমে অথেন্টিকেশন এবং অথরাইজেশন পরিচালনা করতে সাহায্য করে।

২.1. OAuth2 Server লাইব্রেরি ইনস্টলেশন

CodeIgniter-এ OAuth2 Server লাইব্রেরি ব্যবহার করতে OAuth2 লাইব্রেরি ইনস্টল করুন। আপনি OAuth2 PHP Library ব্যবহার করতে পারেন।

২.2. OAuth2 Server কনফিগারেশন
// OAuth2 Server Configuration
$storage = new OAuth2\Storage\Pdo(array('dsn' => 'mysql:dbname=oauth;host=localhost', 'username' => 'root', 'password' => 'password'));
$server = new OAuth2\Server($storage);

// Define the type of grant (authorization code, password, etc.)
$server->addGrantType(new OAuth2\GrantType\UserCredentials($storage));
২.3. Controller এবং API Endpoint
public function api_login() {
    $server->handleTokenRequest(OAuth2\Request::createFromGlobals())->send();
}

OAuth 2.0 এবং Third-party Authentication CodeIgniter-এ দ্রুত এবং নিরাপদে ইন্টিগ্রেট করা যায়। HybridAuth লাইব্রেরি বা OAuth2 Server লাইব্রেরি ব্যবহার করে আপনি তৃতীয় পক্ষের লগইন পরিষেবাগুলি যেমন Google, Facebook, Twitter সহজে সংযোগ করতে পারেন। OAuth 2.0 প্রটোকল ব্যবহার করে আপনাদের অ্যাপ্লিকেশন আরও নিরাপদ, স্কেলেবল এবং ব্যবহারকারী-বান্ধব হতে পারে।

Content added By
Promotion